标签: jviewport

通过当前日期

似乎不可能修复Graphics2D缺少的代码,我必须设置动画的修复大小,否则一些开始外面的矩形490 x 490冻结或在屏幕上摇晃

我的SSCCE

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.Random;
import java.util.Vector;
import java.util.regex.Pattern;
import javax.swing.*;
import javax.swing.table.*;

public class OneTwoThree implements Runnable {

    private String testS;
    private JFrame frame = new JFrame("frameTitle");
    private JScrollPane tblS = new JScrollPane();
    private JTable tbl;
    private Vector<String> rOrH;
    private long t1 = 0L;
    private long t2 = 0L;
    private AlphaChars aChars = new AlphaChars();
    private GradientViewPortOriginal tableViewPort;
    private JViewport viewport = new JViewport();
    private Random random …
Run Code Online (Sandbox Code Playgroud)

java swing graphics2d jviewport

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

仅当JTable适合视口时才启用JTable的自动调整大小

我需要在JScrollPane中创建一个带有可调整大小的列的JTable(当用户增加列宽时 - 出现水平滚动条).为此,我有用table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);.此外,当视口宽度足以包含整个表格时 - 列应该拉伸以填充视口宽度.为了实现这一点,我有getScrollableTracksViewportWidth()JTable类的覆盖方法如下:

@Override
public boolean getScrollableTracksViewportWidth() {
    return getPreferredSize().width < getParent().getWidth();
}
Run Code Online (Sandbox Code Playgroud)

这种方法很有效,除了一件事:当我第一次尝试调整列的大小时,它返回自己的宽度以开始位置.如果我快速调整列大小并释放鼠标表继续工作正常.那么,这种行为的原因是什么?为什么表尝试调整大小,即使getScrollableTracksViewportWidth()返回false?或者,也许,你可以提出更好的解决方案来实现这样的调整大小模式?

贝娄是上述问题的简单工作示例:

import javax.swing.*;

public class TestTable {
    private static Object[][] data = new Object[][] {
            { "a", "b", "c" },
            { "d", "e", "f" }
    };
    private static Object[] colNames = new Object[] { "1", "2", "3" };

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JTable table = new JTable(data, colNames) …
Run Code Online (Sandbox Code Playgroud)

java swing jtable preferredsize jviewport

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

JScrollPane中的JTable,如何设置背景?

我用a JScrollPane来包装一个JTable.根据配置,有一些空间未被表占用.它被绘制为灰色(看起来它是透明的,你可以看到后面的组件).如何将此区域设置为某种颜色?

这是一个SSCCE来说明.

import java.awt.Color;
import java.util.Vector;

import javax.swing.JDialog;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class DialogDemo extends JDialog {
    public static void main(final String[] args) {
        final DialogDemo diag = new DialogDemo();
        diag.setVisible(true);
    }

    public DialogDemo() {
        super();
        setTitle("SSCCE");

        final Vector<Vector<String>> rowData = new Vector<Vector<String>>();
        final Vector<String> columnNames = new VectorBuilder<String>().addCont("Property").addCont("Value");
        rowData.addElement(new VectorBuilder<String>().addCont("lorem").addCont("ipsum"));
        rowData.addElement(new VectorBuilder<String>().addCont("dolor").addCont("sit amet"));
        rowData.addElement(new VectorBuilder<String>().addCont("consectetur").addCont("adipiscing elit."));
        rowData.addElement(new VectorBuilder<String>().addCont("Praesent").addCont("posuere..."));

        final JTable table = new JTable(rowData, columnNames);
        JScrollPane pane = new JScrollPane(table);

        // ************* make …
Run Code Online (Sandbox Code Playgroud)

java swing background jtable jviewport

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

JTable如何改变BackGround Color

我从MeBigFatGuy有趣的问题中获得灵感,在这个连接中,我有一个非常具体的问题Graphisc2D,如何改变BackGround Color取决于是否JTables Row可见JViewPort,

1)如果1st. & last JTables Row在中可见JViewPort,则BackGround将被着色为Color.red

2)如果1st. & last JTables Row在中不可见JViewPort,那么BackGround就会被着色了Color.whatever

在此输入图像描述

来自SSCCE

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import javax.swing.*;
import javax.swing.RepaintManager;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.TableModel;

/*
https://stackoverflow.com/questions/1249278/
how-to-disable-the-default-painting-behaviour-of-wheel-scroll-event-on-jscrollpan
 *
and
 *
https://stackoverflow.com/questions/8195959/
swing-jtable-event-when-row-is-visible-or-when-scrolled-to-the-bottom
 */
public class ViewPortFlickering {

    private JFrame frame = new JFrame("Table");
    private JViewport viewport = new JViewport(); …
Run Code Online (Sandbox Code Playgroud)

java swing gradient jtable jviewport

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

如何在Java Swing中使用鼠标平移图像

我正在创建一个Java应用程序,允许用户使用鼠标查看图像和平移图像.为了实现图像的平移,我使用JViewports 的组合mouseClickedmouseDragged事件.大部分代码都在mouseDragged方法中

public void mouseDragged(MouseEvent e, WindowWrapper w) {
    final JViewport vp = someFieldViewPort;

    //Getting the point that the mouse is dragged to to
    Point cp = e.getPoint();
    final Point vPoint = vp.getViewPosition();

    //I found the image went off the content to show the white border so I included this 
    // Here pp is a field that I sent when the mouse is clicked in a separate method

    if(vPoint.getX()+pp.x-cp.x>=0 & vPoint.getY()+pp.y-cp.y>=0)
        vPoint.translate(pp.x-cp.x, pp.y-cp.y);
    else if(vPoint.getX()+pp.x-cp.x>=0 & …
Run Code Online (Sandbox Code Playgroud)

java swing image point jviewport

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

何时布局JScrollPane时调用getPreferredScrollableViewportSize()?

实现Scrollable接口需要实现getPreferredScrollableViewportSize()方法.这通常只需将调用转发到getPreferredSize()来完成 - 除非Scrollable的其他参数可能影响首选的JViewport大小,例如JTree中的setVisibleRowCount()方法.

我有一种情况,我认为这种方法可以帮助我实现我的目标,但在我的getPreferredScrollableViewportSize()实现中的一个简单的print语句确认它永远不会被调用.搜索JScrollPane,ScrollPaneLayout和JViewport确认没有(直接)调用该方法.然而,JScrollPane中的注释明确指出ScrollPaneLayout使用它,我可以确认它是在JTree中按预期实现的.

什么时候调用,什么类(大概是LayoutManager)和什么时候?我正在使用JDK 1.7_07

java swing jscrollpane scrollable jviewport

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

我希望在滚动时将图片保留在 jscrollpane 的左上角

我在 JScrollpane 中有一个 JPanel。我在 BufferedImage 上绘制,并将其显示在 JPanel 上。在 JScrollpane 的左上角,我想要一张图片,当我向下滚动查看 JPanel 的其余部分时,该图片始终保留在该角落。这里是Jpanel的paintComponent方法:

@Override
public void paintComponent(Graphics g){
    super.paintComponent(g);
    if (bufferedImage != null){
        g.drawImage(bufferedImage, 0, 0, this);
        Point p = parent.getViewPosition();
        System.out.println("paintComponent(): "+ p.x + "," + p.y);
        g.setColor(Color.RED);
        g.fillRect(p.x + 20, p.y + 20, 200, 200);
    }
}
Run Code Online (Sandbox Code Playgroud)

其中parent.getViewPosition()给我scrollPane.getViewport().getViewPosition()。当我启动时,我可以看到左上角有红色矩形的缓冲图像。当我向下滚动时,我可以看到缓冲图像的其余部分,但红色矩形向上移动,然后消失,并且当我向上滚动时不再出现。在控制台中,我可以看到滚动时点 p 发生变化:

paintComponent(): 0,0
paintComponent(): 0,10
paintComponent(): 0,20
paintComponent(): 0,30
paintComponent(): 0,40
paintComponent(): 0,50
Run Code Online (Sandbox Code Playgroud)

谁能帮我解决这个问题吗?

java swing jscrollpane imageicon jviewport

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

如何将组件置于其他组件之上?

我有一个JScrollPanel包括一个大面板,它自己包括3个内板.我想把一个面板(例如)放在一个特殊的地方,以便始终可以看到,我的意思是用户可以滚动到任何想要的地方,但该面板始终位于其他组件的顶部,并且不会移动.我尝试过这样做,JLayeredPane但我做不到.我该怎么办?

java swing jscrollpane jlayeredpane jviewport

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

在JScrollPane中获取JPanel

我有一个JScrollPane,我在JScrollPane中放了一个JPanel.JPanel拥有可变数量的JLabel.

这是我如何"新"它:

JPanel dataPanel  = new JPanel();
//then do a for loop to put a few JLabels in dataPanel
JScrollPane scrollPane = new JScrollPane(dataPanel);
Run Code Online (Sandbox Code Playgroud)

我想知道如何在另一堂课中获得这些JLabel?我尝试了以下代码,但无法使用ClassCastException.在那个类中,我成功获得了JScrollPane,我将使用scrollPane来表示它.

//I only put a panel in the JScrollPane, so I used 0 in the getComponent() method
JPanel panel = scrollPane.getComponent(0);
for(int i = 0; i < panel.getComponentCount(); i++){
    JLabel label = (JLabel)panel.getComponent(i);
}
Run Code Online (Sandbox Code Playgroud)

事实上,在声明中:

JPanel panel = scrollPane.getComponent(0);
Run Code Online (Sandbox Code Playgroud)

抛出ClassCastException.

java.lang.ClassCastException: javax.swing.JViewport cannot be cast to javax.swing.JPanel
Run Code Online (Sandbox Code Playgroud)

赞赏求助:)

java swing jpanel jscrollpane jviewport

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

JScrollPane adjustListener 和 scrollRectToVisible

JScrollPane当用户滚动它时,我需要处理事件。在这里建议使用addAdjustmentListenertoJViewport或 Vertical/Horizo​​ntalScrollBar。

有什么区别,我应该选择哪种方法?

我也想用scrollRectToVisible同样的方法JScrollPane,我应该期待AdjustmentListener使用这种方法吗?

另外我想知道是否scrollRectToVisible尝试进行最小滚动以使所需的矩形可见,还是尝试使其在JViewport?

UPD:要求:

1) 有一个 JScrollPane,其中一个 JPanel 有许多 JLabel(ImageIcon),因此其中一些不可见。

2)当网络事件发生时,我需要向用户显示 JLabel 之一(使其可见)。如果 I 最初不可见,则 JScrollPane 应自动滚动。这就是为什么我提到scrollRectToVisible.

3) 在里面有 ImageIcon 的 JLabel 上方,我需要显示一条消息来解释这个元素发生了什么。由于 JLayeredPane 层次结构更高,该消息当前被实现为另一个带有浮点数的 JLabel。现在的问题是,如果用户滚动 JScrollPane,浮动 JLabel 应该相应地移动到相应 JLabel(ImageIcon) 的顶部。

UDP2:SSCCE

我还没有实现浮动 JLabel,但我已经不喜欢索引为 11 的标签的反应,scrollRectToVisible因为它被裁剪了一半。

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList; …
Run Code Online (Sandbox Code Playgroud)

java swing jscrollpane jscrollbar jviewport

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

JTable获得第一个可见行

我有一个Swing JTable.它很大,用户可以向上和向下滚动以查看他们想要处理的数据行.当用户停止滚动时,我想知道JTable的行号,它是用户可以看到的第一个可见行.在用户进行其他操作之后,我想用它来回滚到表中的这个位置(我知道如何做滚动的部分 - 它得到了第一个让我难过的可见行).

java swing jtable jscrollpane jviewport

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