Swing java,窗口分割,内容分为两半

时间:2013-11-21 17:10:10

标签: java windows swing text-files

我正在尝试使用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一直在挣扎数周。谢谢!

4 个答案:

答案 0 :(得分:0)

  

我几周来一直在和Swing挣扎。

首先阅读Swing tutorial。有很多工作的例子可以帮助你入门。

您的代码存在很多问题:

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

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

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

      

    但文本格式更像文本查看器,如果这是有道理的。

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

答案 1 :(得分:0)

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

您可以看到示例完全按照您想要的结果here:设置FlowLayout,然后设置左侧面板的首选大小。根据窗口的大小自动设置左侧的大小。

答案 2 :(得分:0)

我为你写了一个小例子,试着激励它

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();
    }

}

希望有帮助,如果是这样,请=)萨拉姆

答案 3 :(得分:0)

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

        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?