我正在尝试使用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一直在挣扎数周。谢谢!
答案 0 :(得分:0)
我几周来一直在和Swing挣扎。
首先阅读Swing tutorial。有很多工作的例子可以帮助你入门。
您的代码存在很多问题:
layout managers
text component features
setVisible()
方法。执行此操作时,无需调用repaint()或revalidate()。此外,您应该在setVisible()之前调用pack()
,以便所有组件都以其首选大小显示。Concurrency
。它只是随机放置并且周围有空白区域。
这很正常。将组件添加到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?