有几次我因为建议使用以下方法而受到批评:
在Swing组件上.当我想在显示的组件之间定义比例时,我没有看到任何替代它们的用法.我被告知这个:
对于布局,答案总是相同的:使用合适的LayoutManager
我在网上搜索了一下,但我没有找到任何关于这个主题的综合分析.所以我有以下问题:
对于我在Java中创建的GUI应用程序,我有以下内容:
在下列条件下,尺寸调整不会给我任何问题:
当我将JSplitPane移动得太靠近右边时会出现问题,于是调整窗口大小,JSplitPane右侧的JPanel无法遵循我设置的最小宽度.
我尝试在JScrollPane上设置最大宽度,这似乎根本没有帮助.
我必须做一些涉及最大尺寸的事情吗?或者也许有一种方法可以将监听器连接到其中一个面板以强制我想要的行为?最后,我只想让JSplitPane中的右侧面板永远不会小于200px宽.
以下是我遇到的行为示例:
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTree;
public class ResizeTest
{
private JFrame frame;
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
ResizeTest window = new ResizeTest();
window.frame.setVisible(true);
}
catch(Exception e)
{
e.printStackTrace();
}
}
});
}
public ResizeTest()
{
initialize();
}
private void initialize()
{
frame = new JFrame();
frame.setMinimumSize(new Dimension(300, …Run Code Online (Sandbox Code Playgroud) 我有一个面板布局问题,我似乎无法解决.我有以下代码:
public class Test extends ApplicationFrame {
public Test(String title) {
super(title);
JPanel jpanel = new JPanel();
jpanel.setPreferredSize(new Dimension(100 * 2, 300));
jpanel.setBackground(new Color(0xFF0000));
JScrollPane scrollPane = new JScrollPane(jpanel);
scrollPane.setBackground(new Color(0xFF0000));
scrollPane.getViewport().setPreferredSize(new Dimension(100 * 2, 300));
this.add(scrollPane, BorderLayout.WEST);
this.setPreferredSize(new Dimension(500, 500));
}
public static void main(String args[]) {
Test test = new Test("Layout Test");
test.pack();
RefineryUtilities.centerFrameOnScreen(test);
test.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
创建以下布局:

当我拖动窗口的右侧并将其移动到红色JPanel和JScrollPane,我想水平滚动条出现在JScrollPane.但是目前窗口只是收缩而没有显示水平滚动条.这可能吗?
我想保留,BorderLayout.WEST因为我的用例就是当我没有足够大的图表来填充整个窗口时保持JFreeChart不会拉伸.
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
scrollPane , scrollPane2);
Run Code Online (Sandbox Code Playgroud)
我想做一些非常微不足道的行动,但我不行.
每当我向任一个scrollPanes添加标签时 - 它们根本不显示任何内容.我可以在窗格中显示表格,但这些是通过构造函数添加的.很生气.
此外,如果splitPane只允许两个组件 - 如果我想将窗口分成四个部分怎么办?SplitPane的SplitPane?
感谢帮助,
框架窗口正在启动,但背景和前景图像未加载,窗框尺寸也非常小.请帮我修复错误.
这是发布的代码
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.util.Vector;
public class Aquarium extends Frame implements Runnable
{
Image aquariumImage,memoryImage;
BufferedImage bImage;
Graphics memoryGraphics;
Image [] fishImages=new Image[2];
MediaTracker tracker;
int numberFishes=12;
Vector<Fish> fishes=new Vector<Fish>();
Thread thread;
boolean runOk=true;
int sleepTime=110;
Fish fish;
Aquarium()
{
//set the title and assign tracker object
setTitle("The Aquarium ");
tracker=new MediaTracker(this);
//add images to the tracker object to trace it
fishImages[0]=Toolkit.getDefaultToolkit().getImage("src\fish1.gif");
tracker.addImage(fishImages[0], 0);
System.out.println("fish 1 size "+Toolkit.getDefaultToolkit().getImage("src\fish1.gif").getWidth(null));
fishImages[1]=Toolkit.getDefaultToolkit().getImage("src\fish2.gif");
tracker.addImage(fishImages[1], …Run Code Online (Sandbox Code Playgroud) 我做了一个Java swing应用程序.我的主要课程完成了所有的工作SwingUtilities.invokeLater(new Runnable().
我的第二课,我用过的都是:
JPanel container = (JPanel) getContentPane();
Run Code Online (Sandbox Code Playgroud)
然后通过调用添加所有位
container.add([name of component]
Run Code Online (Sandbox Code Playgroud)
我现在想把整个'应用程序'变成一个JSplitPane.因此,我希望我的应用程序在一边,而另一端则需要其他东西.
我该怎么做呢?
public class one{
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new App("main");
f.setSize(1920,1080);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
public class App extends JFrame {
SuppressWarnings("empty-statement")
public App(String title) {
super(title);
JPanel container = (JPanel) getContentPane();
container.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
JButton new button = new JButton("new");
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 2;
//ENTER LOTS …Run Code Online (Sandbox Code Playgroud) java ×6
swing ×6
jpanel ×2
jsplitpane ×2
autoresize ×1
frame ×1
image ×1
jfreechart ×1
jscrollpane ×1
resize ×1