相关疑难解决方法(0)

我应该避免在Java Swing中使用set(Preferred | Maximum | Minimum)Size方法吗?

有几次我因为建议使用以下方法而受到批评:

  1. 有必要对setPreferredSize
  2. 了setMinimumSize
  3. setMaximumSize

Swing组件上.当我想在显示的组件之间定义比例时,我没有看到任何替代它们的用法.我被告知这个:

对于布局,答案总是相同的:使用合适的LayoutManager

我在网上搜索了一下,但我没有找到任何关于这个主题的综合分析.所以我有以下问题:

  1. 我应该完全避免使用这些方法吗?
  2. 已经定义了这些方法的原因.那我什么时候应该使用它们?在哪种情况下?出于什么目的?
  3. 使用这些方法的负面后果究竟是什么?(我只能考虑在具有不同屏幕分辨率的系统之间添加可移植性).
  4. 我认为任何LayoutManager都不能完全满足所有需要的布局需求.我是否真的需要为布局上的每个小变化实现一个新的LayoutManager?
  5. 如果4的答案是"是",那么这是否会导致LayoutManager类的扩散变得难以维护?
  6. 在我需要定义组件子级之间的比例的情况下(例如,child1应该使用10%的空间,child2 40%,child3 50%),是否可以在不实现自定义LayoutManager的情况下实现这一点?

java swing layout-manager

471
推荐指数
8
解决办法
5万
查看次数

如何在Java中正确设置最小大小?

对于我在Java中创建的GUI应用程序,我有以下内容:

  • 一个JFrame,最小大小为(300,200)
  • 一个JSplitPane,其中包括:
    • 在左边,一个JScrollPane(包含一个JTree),最小大小为(100,0)(我只想将宽度限制为200)
    • 在右边,一个最小尺寸为(200,0)的JPanel

在下列条件下,尺寸调整不会给我任何问题:

  • 将JSplitPane一直调整到左侧(到JScrollPane的最小大小),然后调整窗口大小
  • 只是在一定程度上调整窗口大小

当我将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)

java swing resize autoresize

10
推荐指数
1
解决办法
4万
查看次数

如何在JScrollPane中获取水平滚动条

我有一个面板布局问题,我似乎无法解决.我有以下代码:

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)

创建以下布局:

在此输入图像描述

当我拖动窗口的右侧并将其移动到红色JPanelJScrollPane,我想水平滚动条出现在JScrollPane.但是目前窗口只是收缩而没有显示水平滚动条.这可能吗?

我想保留,BorderLayout.WEST因为我的用例就是当我没有足够大的图表来填充整个窗口时保持JFreeChart不会拉伸.

java swing jfreechart jpanel jscrollpane

5
推荐指数
1
解决办法
5087
查看次数

splitPane上的Swing行为

  JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
             scrollPane , scrollPane2);
Run Code Online (Sandbox Code Playgroud)

我想做一些非常微不足道的行动,但我不行.

每当我向任一个scrollPanes添加标签时 - 它们根本不显示任何内容.我可以在窗格中显示表格,但这些是通过构造函数添加的.很生气.

此外,如果splitPane只允许两个组件 - 如果我想将窗口分成四个部分怎么办?SplitPane的SplitPane?

感谢帮助,

java swing jsplitpane

2
推荐指数
1
解决办法
289
查看次数

图像未加载

框架窗口正在启动,但背景和前景图像未加载,窗框尺寸也非常小.请帮我修复错误.

这是发布的代码

Aquarium.java

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 image frame paintcomponent

1
推荐指数
1
解决办法
1519
查看次数

JSplitPane - 将应用程序拆分为两个?

我做了一个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 swing jpanel jsplitpane

0
推荐指数
1
解决办法
530
查看次数