【问题标题】:Swing java, window split with content in both halvesSwing java,窗口拆分为两半内容
【发布时间】:2013-11-22 01:43:02
【问题描述】:

我正在尝试使用 Swing 使用 Java 编写一个程序,该程序将显示一个窗口:

   +--------------+-----------------------------------+
   |              |                                   |
   |              |                                   |
   |              |                                   |
   |              |                                   |
   |              |                                   |
   |              |                                   |
   |              |                                   |
   +--------------+-----------------------------------+

左侧窗口包含文本文件,右侧窗口加载文本文件。问题有两个方面。一方面,Swing 让我精神振奋,因为我似乎无法理解拆分框架的工作原理。

问题的后半部分是,当我在右侧获取文本时,它只是随机放置并且周围有空白区域。我希望它像 Windows 资源管理器窗口一样显示,但文本格式更像是文本查看器,如果这有意义的话。

这是我尝试过的。

package myCB;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class MyCB extends JFrame implements ActionListener {

/**
 * 
 */
private static final long serialVersionUID = 1L;

public static void main(String[] args) {

    new MyCB();

}

public MyCB() {

    super("MyCB.0.0.0.1");
    setResizable(true);
    setSize(750, 400);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

//      Dimension size1 = new Dimension(200, 400);
//      Dimension size2 = new Dimension(500, 400);      

    JPanel p = new JPanel();
    JPanel b1 = new JPanel();
    b1.setPreferredSize(new Dimension(200, 400));
    JPanel b2 = new JPanel();
    b2.setPreferredSize(new Dimension(100, 100));

    b1.setVisible(true);
    b2.setVisible(true);

    JTextArea text = new JTextArea("This is a sample of a text area" + "in Java Swing for my program.");
    text.setLineWrap(true);
    text.setWrapStyleWord(true);


    b2.add(text);

    p.setLayout(new BorderLayout());
    setVisible(true);

    p.add(b1, BorderLayout.LINE_START);
    p.add(b2, BorderLayout.CENTER);
    p.setVisible(true);
    repaint();

    add(p);
    revalidate();

}

@Override
public void actionPerformed(ActionEvent arg0) {

    // TODO Auto-generated method stub

}

}

任何帮助将不胜感激。我已经在 Swing 上苦苦挣扎了好几个星期。谢谢!

【问题讨论】:

    标签: java windows swing text-files


    【解决方案1】:

    我为你写了一个小例子,试着给它一些启发

    import java.awt.Color;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JSplitPane;
    
    public class SplitPane extends JFrame {
    
        private JPanel p1 = new JPanel(), p2 = new JPanel();
        private JSplitPane jsp;
        public SplitPane() {
            super("SplitPane example");
            setDefaultCloseOperation(EXIT_ON_CLOSE);
    
            p1.setBackground(Color.orange);
    
            p2.setBackground(Color.green);
    
            jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, p1, p2);
            jsp.setDividerLocation(getWidth() / 2);
            setContentPane(jsp);
    
            setSize(300, 300);
    
            setLocationRelativeTo(null);
    
            setVisible(true);
    
        }
    
        public static void main(String[] args) {
            new SplitPane();
        }
    
    }
    

    希望对你有帮助,如果有请补上 =) Salam

    【讨论】:

    • 谢谢!这正是我想要的!
    【解决方案2】:

    您应该开始阅读不同的秋千布局,帮助您整理空间,而无需自己手动设置尺寸。 The Java Tutorial上有很多不同布局的例子。

    您可以查看示例以准确执行您想要的结果here:您设置 FlowLayout,然后设置左侧面板的首选大小。左边的大小是根据窗口大小自动设置的。

    【讨论】:

    • 感谢您的回复,我开始使用 Java 教程,但在没有指导帮助的情况下变得混乱。
    【解决方案3】:

    我已经在 Swing 上苦苦挣扎了好几个星期了。

    首先阅读Swing tutorial。那里有很多工作示例可以帮助您入门。

    你的代码有很多问题:

    1. 不要使用 setPreferredSize()。 Swing 旨在与布局管理器一起使用。然后布局管理器将为每个组件确定适当的大小。阅读layout managers上的教程部分
    2. 应在 JScrollPane 中显示 JTextArea,然后将滚动窗格添加到面板中。您可能希望使用 new JTextArea(5, 30) 创建文本区域,以提示文本区域的首选大小。阅读text component features上的教程部分
    3. 您应该只在所有组件都添加到框架之后调用框架的setVisible() 方法。当你这样做时,不需要调用 repaint() 或 revalidate()。此外,您应该在 setVisible() 之前调用 pack(),以便所有组件都以其首选大小显示。
    4. 应在事件调度线程上创建 GUI 组件。阅读Concurrency 部分。

    它只是随机放置并且周围有空白区域。

    这是正常的。当您将组件添加到 CENTER 时,它会占用框架上所有剩余的可用空间。

    但文本的格式更像是文本查看器,如果这有意义的话。

    对我来说没有意义。文本区域就像您在此论坛上输入问题的区域。

    【讨论】:

    • 感谢您的回复,但我从 Oracles 教程开始,然后迷路了。再次感谢!
    • @phyremynd,你是什么意思你迷路了?您的代码看起来与教程示例中的代码完全不同。这就是你迷路的原因。本教程的重点是从可行的内容开始,然后根据您的需要对其进行自定义。
    【解决方案4】:

    听起来您正在寻找 JSplitPane。它也很容易使用,您只需指定方向(水平或垂直),您可以使用两个 JPanel 或其他容器/组件。无论如何,这是一个简单的例子:

            JPanel leftPanel = new JPanel();
            JPanel rightPanel = new JPanel();
            JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, rightPanel);
    
            JLabel lblRight = new JLabel("Right");
            rightPanel.add(lblRight);
    
            JLabel lblLeft = new JLabel("Left");
            leftPanel.add(lblLeft);
    

    既然你说你已经在挥杆上挣扎了这么长时间,你有没有试过windowbuilder plugin?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-14
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      相关资源
      最近更新 更多