我刚刚开始学习Java中的swing。我在swing库中遇到JSplitPane问题。我创建了一个包含四个类的应用程序Frame(), TablePanel(), TextPanel(), FormPanel()
Frame是扩展JFrame的主类。下面的图像更清楚地描述了这些类。
现在我的问题是我希望分词器位于TablePanel
类和TextPanel
类之间。我想知道是否有一种方法可以在TablePanel
中实例化TextPanel
并在表格面板和TextPanel
之间设置分隔符,如:
以下只是一个伪代码;
TablePanel() {
TextPanel textPanel = new TextPanel();
setLayout(new BorderLayout());
JSplitPane spliter = new JSplitPane(vertical, textPanel, this);
add(spliter);
}
如果我错了,请。通过提出更好的方法纠正我的错误。
我们将不胜感激。提前谢谢!
答案 0 :(得分:2)
使用JSplitPane.setDividerLocation(double)
,但请注意Java文档:
将分隔符位置设置为
JSplitPane
大小的百分比。此方法以
setDividerLocation(int)
执行。此方法会立即根据其当前大小更改拆分窗格的大小。 如果拆分窗格未正确实现并且在屏幕上,此方法将无效(新的分隔符位置将变为(当前大小* proportionalLocation)为0)。
因此,在GUI可见后,必须将其称为 。
为了在构建 GUI的过程中实现这一点,我将使用单个镜头Swing Timer
延迟设置分频器位置大约半秒,然后启动计时器在创建组件的最后。
这是一个简单的MCVE实现。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
public class SplitPaneDivider {
private JComponent ui = null;
SplitPaneDivider() {
initUI();
}
public void initUI() {
if (ui != null) {
return;
}
ui = new JPanel(new BorderLayout(4, 4));
ui.setBorder(new EmptyBorder(4, 4, 4, 4));
final JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
new ColoredPanel(Color.GREEN),
new ColoredPanel(Color.YELLOW));
ui.add(sp);
ActionListener dividerListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
sp.setDividerLocation(.7d);
}
};
Timer timer = new Timer(500, dividerListener);
timer.setRepeats(false);
timer.start();
}
class ColoredPanel extends JPanel {
ColoredPanel(Color color) {
setBackground(color);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 100);
}
}
public JComponent getUI() {
return ui;
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception useDefault) {
}
SplitPaneDivider o = new SplitPaneDivider();
JFrame f = new JFrame("Split Pane Divider");
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationByPlatform(true);
f.setContentPane(o.getUI());
f.pack();
f.setMinimumSize(f.getSize());
f.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}
答案 1 :(得分:0)
我建议您研究以下内容以正确理解JSplitPane的工作原理,并获得一些演示示例: