相关疑难解决方法(0)

在Java中调整大小时,绘制的内容不可见

请注意我还没有在Mac机器上的Windows机器上测试过这个.我不太确定这是否也出现在Windows机器上......

当我调整Java应用程序的大小时,内容是不可见的.我已经找到一种方法来解决它调整其大小,但不能同时在用户调整窗口的大小.

我没有使用Swing或其他东西,因为它使我的二进制文件变得如此缓慢(在我看来).

结构是这样的:

  • Frame 我的主窗口
    • Container内容视图main-window
      • Container基于paint(Graphics g)-method 的子视图

我已经添加了所有监听器My main-window,现在我可以调整窗口大小重绘Content-view .

public void componentResized(ComponentEvent e) {
    this.contentView.paint(this.contentView.getGraphics());
}
Run Code Online (Sandbox Code Playgroud)

我谨慎使用paint(getGraphics())-method并不是一个非常好的方法,但是因为repaint()-method根本没有做任何事情,所以它是唯一可行的方法.

调整大小时,所有绘制的内容都变得不可见.但是,当我向我添加Button-instance Content-view并调整我Main-window的大小时,该按钮不会被隐藏.

能够追踪"live'调整大小事件:

public void componentMoved(ComponentEvent e) {
    System.out.println("Live-resize");
}
Run Code Online (Sandbox Code Playgroud)
  1. 当我开始调整大小时,不会调用此方法.
  2. 调整大小时,在我的日志中生成"实时调整大小"每个像素我调整窗口大小.
  3. 当我停止调整大小时,没有调用此方法,componentResized-method会这样做.

当我将repaint-method(或官方重绘方法)添加到像这样的'live'-resize事件时,我仍然得到输出,但是,它没有重新绘制或者某些东西

public void componentMoved(ComponentEvent e) {
    System.out.println("Live-resize");
    this.contentView.paint(this.contentView.getGraphics());
}
Run Code Online (Sandbox Code Playgroud)

要么

public void componentMoved(ComponentEvent e) {
    System.out.println("Live-resize");
    this.contentView.repaint();
} …
Run Code Online (Sandbox Code Playgroud)

java graphics resize window minimize

5
推荐指数
3
解决办法
4861
查看次数

仅在必要时在FlowLayout中显示ScrollBars

我会改写我的问题:**

如果有足够的空间通过变形来显示所有项目,如何防止在FlowLayout中启用Java ScrollBar.

例**

这是我想要实现的截图:

请注意,在不需要时禁用滚动条. 在此输入图像描述

当您调整窗口大小时,如果某些项目在视图平面外,则应显示滚动条 在此输入图像描述

PS我知道称为文档和Web的东西.

java user-interface swing

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

如何重新计算JComponent的首选大小?

我知道当我创建一个JComponent的实例时,它有自己的首选大小.现在让我们假设我setPreferredSize手动JComponent的维度为0 x 0.我希望该组件"重置"自己的preferredSize.我怎么做?

java swing jcomponent

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

Java swing布局

我很难确定要使用的布局.帮助任何建议.

在此输入图像描述

JPanel mainpanel = new JPanel();

public void addPanel(JPanel panel){
    mainpanel.add(panel);
}

addPanel(A);
addPanel(B);
addPanel(C);
addPanel(D);
addPanel(E);
....
Run Code Online (Sandbox Code Playgroud)

面板A,B,C,D ......的尺寸不固定.

我怎样才能做到这一点?

java layout swing layout-manager

5
推荐指数
2
解决办法
2452
查看次数

在FlowLayout中设置JLabel的大小

我有一个使用FlowLayout的JPanel.我向JPanel添加了许多JLabel,使用setPreferedSize()调整它们的大小并将它们保存在list_list列表中.一切正常.然后我想改变它们的大小:

for(JLabel c:label_list){
c.setPreferedSize(new Dimension(10,10));
}
Run Code Online (Sandbox Code Playgroud)

它不起作用.

c.setBackground(Color.red)
Run Code Online (Sandbox Code Playgroud)

和类似的东西工作.为什么我不能在这里使用setPreferedSize?

c.setBounds(1,1,10,10)和c.setSize(10,10)工作,但在我更新UI(调整面板大小)后,每个尺寸都恢复正常.

java swing jlabel flowlayout

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

Java Swing:如何更改Grid布局中一行的大小,并允许它仅水平而不是垂直动态调整大小?

大家好,我有一个内部有三个组件的JFrame.

  1. 一份菜单
  2. 选项卡式窗格
  3. 一个有一些按钮的面板

最初我的目标是创建如下设计: 在此输入图像描述

当用户调整应用程序的大小时,一切都会调整大小.所以我想也许如果我使用简单的网格布局我的问题就会解决,所以我决定做以下事情:

  1. 选项卡式窗格中将包含一些面板,这些面板将遵循网格布局.

  2. 底部的面板将遵循网格布局.

  3. JFrame也将遵循网格布局.

结果:

在此输入图像描述

你可以看到这不是我想要的,按钮太大了,尽管应用程序调整得很好:

在此输入图像描述

按钮也会调整大小,但它们仍然太大.我希望能够为按钮设置一个小尺寸(更具体地说是它们所包含的面板),当用户调整应用程序大小时,按钮只会水平调整而不是垂直调整,这意味着只有选项卡式窗格会变得更大垂直.这可以实现吗?我搜索并发现了关于gridbaglayout,我开始玩了一点,但我没有做到任何事情.我设法做的就是以下内容:

在此输入图像描述

看起来不错,但是当我调整大小时,这就是我得到的:

在此输入图像描述

提前致谢.

java layout swing grid-layout gridbaglayout

5
推荐指数
2
解决办法
3万
查看次数

如何设置JTable的宽度

我在JScrollPane中有一个JTable.我希望最小宽度大约为600宽表.我尝试在表格,滚动窗格和面板上设置最小尺寸.大小根本没有变化,我错过了什么?很难谷歌这一点,因为所有出现的是如何设置列的宽度.

在此输入图像描述

这是代码:

class SearchResults extends JPanel {

/**
 * Create the panel.
 */
public SearchResults() {
    setMinimumSize(new Dimension(640, 480));
    String[][] data= new String[][] {
            {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "VIEW BUTTON"},
            {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "VIEW BUTTON"}};
    String[] col = new String[] {
            "Last Name", "First Name", "Middle Initial", "Phone Number", …
Run Code Online (Sandbox Code Playgroud)

java swing jtable jscrollpane

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

JComboBox无法在JTable TableHeader中扩展

我已经阅读了大多数JTable/JComboBox对此类其他问题的回复,但还没有找到解决我问题的方法.

我创建了一个具有JComboBox TableHeader元素的表.没有任何JComboBox元素将打开以显示项目列表.如何获取要显示的各个JComboBox元素的项目列表?

请注意,此问题的一个显着特征是JComboBox位于TableHeader中,未嵌入JTable单元中.

任何帮助表示赞赏.

SSCE

import java.awt.Component;
import java.awt.Dimension;
import java.util.Enumeration;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;

public class ComboHeaderTest extends JScrollPane {

private static final Dimension DEFAULT_SIZE = new Dimension(200, 200);

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            new ComboHeaderTest().initComponents();
        }
    });
}

private ComboHeaderTest() {

    final String[][] data = { {"Header 1", "Header 2", "Header 3"},
                                {"A", "B", "C"},
                                {"D", …
Run Code Online (Sandbox Code Playgroud)

java swing jtable jcombobox jtableheader

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

如何在更新窗口时防止Java图形程序窃取焦点?

在(嵌入式)Ubuntu 12.04系统上,我们有一个简单的Java程序,它在窗口上显示一些图形模式,每秒钟更新一次.我们用它来监控系统上运行的一些进程.问题在于,虽然它是活动的而不是最小化的,但只要窗口更新,它就会窃取焦点.这使得无法使用开放式终端窗口.

运行应用程序表单命令行或从Eclipse IDE时,行为是相同的.

在NetBeans IDE下运行时,Windows 7上不会出现同样的问题.

我们如何防止Java应用程序将重点放在Ubuntu机器上?


更新1:发现这个问题似乎很难解决同样的问题: 如何停止/解决Java应用程序窃取Linux窗口管理器的焦点.阅读它,我了解到问题是使用JFrame作为容器,这是我们使用的.他们的解决方案是使用JWindow容器而不是JFrame容器.然而,寻找差异,JWindow是"赤裸裸",并没有表现得像一个"真正的"窗口,因为没有装饰.有没有办法 JFrame中使用JWindow ,从而消除焦点窃取?


更新2:尝试在PC上的Ubuntu虚拟机上运行此程序会产生同样的错误行为.这表明Windows 7和Linux的Java运行时存在差异,并且该问题并非特定于嵌入式Linux.


更新3:这是一个SSCCE:

//package SSCCE;

import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;

public class MonitorSSCCE extends JFrame{

    public static void main(String[] args) 
    {
        // Set the frame
        JFrame ecoreFrame = new JFrame("SSCCE");
        ecoreFrame.setSize(120, 120);
        ecoreFrame.setVisible(true);

        // Refresh frame every 200 msec
        while (true) {
            GRFX grfx = new GRFX();
            ecoreFrame.add(grfx);
            ecoreFrame.setVisible(true);
            grfx = null;

            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {

            }
        } …
Run Code Online (Sandbox Code Playgroud)

java swing focus focus-stealing ubuntu-12.04

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

调整具有固定宽度的长句的对话框消息(JOptionPane)

我正在尝试JOptionPane使用超链接调整长句的对话框()的高度.

我的代码是......

public class DialogTest {
public static void main(String[] args) throws Exception {
    JTextPane jtp = new JTextPane();
    Document doc = jtp.getDocument();
    for (int i = 0; i < 50; i++) {
        doc.insertString(doc.getLength(), " Hello Java World ", new SimpleAttributeSet());
        if ((3 == i) || (7 == i) || (15 == i)) {
            doc.insertString(doc.getLength(), " Hello Java World ", new SimpleAttributeSet());
            SimpleAttributeSet attrs = new SimpleAttributeSet();
            StyleConstants.setUnderline(attrs, true);
            StyleConstants.setForeground(attrs, Color.BLUE);
            String text = "www.google.com";
            URL url = …
Run Code Online (Sandbox Code Playgroud)

java swing resize jtextpane joptionpane

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