- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 JScrollPanel
,我将一个包含图像的 JPanel
添加到 JScrollPanel
中,它可以工作,但如果 JPanel
中的图像在宽度、高度或两者上都大于 JScrollPanel
,则面板的大小会调整为大约 20x20。它为什么要这么做?我在 JScrollPanel
的视口(viewport)上使用 GridBagLayout
。我期望的是,如果 JPanel
大于 JScrollPanel
它会添加滚动条,但事实并非如此。有什么建议吗?
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
WebFileChooser wfc = null;
if(wfc == null){
wfc = new WebFileChooser(this, "Open an Image");
wfc.setSelectionMode(SelectionMode.SINGLE_SELECTION);
wfc.setAvailableFilter(GlobalConstants.IMAGES_AND_FOLDERS_FILTER);
wfc.setChooseFilter(GlobalConstants.IMAGES_FILTER);
wfc.setCurrentDirectory("/Users/Ryan/Desktop");
}
wfc.setVisible(true);
if(wfc.getResult() == StyleConstants.OK_OPTION){
String file = wfc.getSelectedFile().getPath();
try{
imagePane.remove(canvas);
}catch(Exception e){
}
canvas = new Canvas();
canvas.setVisible(true);
canvas.setImage(file);
//imagePane.getViewport().setLayout(new GridBagLayout());
canvas.setSizeFromLoaded();
imagePane.getViewport().add(canvas);
imagePane.repaint();
imagePane.revalidate();
}
}
这是 Canvas 类:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package pocketshop;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import pocketshop.util.ImageSync;
/**
*
* @author Ryan
*/
public class Canvas extends CanvasShadow{
public static BufferedImage image = null, preview = null;
public static int width, height;
public void setImage(String filename){
try{
Canvas.image = ImageIO.read(new File(filename));
Canvas.width = image.getWidth();
Canvas.height = image.getHeight();
ImageSync.originalPixels = new int[width * height];
ImageSync.previewPixels = new int[width * height];
Canvas.image.getRGB(0, 0, width, height, ImageSync.originalPixels, 0, width);
}catch(IOException e){
}
}
public static void setImage(BufferedImage image){
Canvas.image = image;
Canvas.width = image.getWidth();
Canvas.height = image.getHeight();
ImageSync.originalPixels = new int[width * height];
ImageSync.previewPixels = new int[width * height];
Canvas.image.getRGB(0, 0, width, height, ImageSync.originalPixels, 0, width);
}
public static void setPreview(BufferedImage img, Container parent){
preview = img;
parent.repaint();
}
public static BufferedImage deepCopy(){
ColorModel cm = Canvas.image.getColorModel();
boolean isAlphaPremultiplied = cm.isAlphaPremultiplied();
WritableRaster raster = Canvas.image.copyData(null);
return new BufferedImage(cm, raster, isAlphaPremultiplied, null);
}
public void setSizeFromLoaded(){
try{
this.setPreferredSize(new Dimension(Canvas.width + 10, Canvas.height + 10));
this.setSize(Canvas.width + 10, Canvas.height + 10);
}catch(Exception e){
e.getMessage();
}
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
if(Canvas.preview != null){
g.drawImage(Canvas.preview, 5, 5, width, height, Color.black, null);
}else{
g.drawImage(Canvas.image, 5, 5, width, height, Color.black, null);
}
}
}
这是 CanvasShadow 类:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package pocketshop;
import java.awt.Color;
import org.jdesktop.swingx.JXPanel;
import org.jdesktop.swingx.border.DropShadowBorder;
public class CanvasShadow extends JXPanel{
public CanvasShadow(){
DropShadowBorder shadow = new DropShadowBorder();
shadow.setShadowColor(Color.BLACK);
shadow.setShowLeftShadow(true);
shadow.setShowRightShadow(true);
shadow.setShowBottomShadow(true);
shadow.setShowTopShadow(true);
this.setBorder(shadow);
float[] hsb = new float[3];
Color.RGBtoHSB(255, 255, 255, hsb);
this.setBackground(Color.getHSBColor(hsb[0], hsb[1], hsb[2]));
}
}
这是实际图像:http://images2.fanpop.com/images/photos/4800000/Beach-beaches-4843817-1280-800.jpg
最佳答案
我已经告诉过你去掉那个 GridBagLayout。在 JScrollPane 上设置布局将调整面板大小,使其永远不会大于容器。您的面板必须自行布局,使其与图像的大小相同,以便 JScrollPane 发现它太大而无法显示。只有这样 JScrollPane 才会添加滚动条。因此,如果您的图像是 2000x2000,那么您的面板需要将其首选尺寸设置为 2000x2000,并且表现得好像它可以那么大。 JScrollPane 将完成所有繁重的裁剪工作,并确保面板仅根据滚动条渲染可见部分。如果您的面板始终与 JScrollPane 的视口(viewport)大小相同,则滚动 Pane 认为它适合并且不需要滚动条。
更新:快速谷歌搜索揭示了答案:http://chaosinmotion.com/blog/?p=168
关于java - 如果 JPanel 大于其父级,则调整其大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13570971/
我不太确定为什么较大字符串(“cat”和“dog”)的答案不一致。我正在用链接列表和模板的使用做一些事情。我的好奇心促使我修改模板和函数重载。如果有人能解释发生了什么,我将不胜感激。谢谢你。 #inc
目前我必须编写这样的查询 SELECT * FROM table WHERE value1 > 5000 OR value2 > 5000 OR value3 > 5000 OR value4 > 5
我想创建一个如下所示的查询,但我不确定如何正确编码, 我希望它在开始时间的 1 小时内返回所有预订,这是我想出的: SELECT BookingId, StartTime FROM Booking W
这个问题已经有答案了: How to check if a number is between two values? (12 个回答) 已关闭 6 年前。 我目前正在 Codecademy 上学习
我想验证用户输入。如果用户输入的数字大于 3,则应抛出错误“Too high”,如果小于 0.15,则应抛出“Too low”错误。如果它在 3 到 0.15 之间,那么它应该显示“好的”。 我的代码
我有一个拖动脚本,我在其中拖动 div.slider,我正在跟踪 div.slider 的“左”值,并在它大于 68 时让它淡出,但问题是它当它达到 6 而不是 68 时淡出。如果我将数字更改为 85
是否有一种常见的模式如何在数据库(postgresql)中存储这样的条件,然后以简单的方式从数据库中获取这些数据,并在前端将其与我们在前端的值 SE 进行比较(以获得正确的“值” "): condit
如何大于/小于内部工作 如果我将 5 与 100 与 5 与 2,147,483,647 (Integer.MAX_VALUE) 进行比较,性能会受到多大影响 5 < 100 and 5 < Inte
当我运行此查询时它有效 SELECT sum( amount ) AS balance FROM balance WHERE amount >= 100 但是当我想过滤用户 ID 时,它返回 NULL
我有下表: account(id, balance, bank_branch) 我想选择账户余额大于其 bank_branch 平均余额的所有账户 我试过了 Select id from accoun
你们有没有人知道如何搜索所有大于指定数字的数字? 例如:所有单据编号>65 我试过这样:documentNumber: [65 TO *] 但我收到异常,因为 lucene 期望解析一个没有 * 的数
我正在使用 Prolog 算法,并且有一个生成抽象语法树的程序,例如 plus(num(1),num(2))这只是 1+2 .这是通过使用 DCG 来完成的。在这个例子中 plus(num(1),nu
是否使用 Sin(720) 或 Cos(1440)(以度为单位的角度)? 无论是在计算机编程中还是在任何其他情况下? 一般来说,是否有任何角度的 Sin/Cosine/Tan 使用 大于360? 在物
我发现了一些与此相关的问题,但没有一个真正回答了我的问题。 我有一个像这样的表格文件: 2 10610 0 0 0 0.0105292 2 10649 0 0 0
我是 Prolog 的新手,我正在尝试解决这个练习: Define a predicate greater_than/2 that takes two numerals in the notation
我想选择具有出现次数的不同键,此查询似乎有效: SELECT ItemMetaData.KEY, ItemMetaData.VALUE, count(*) FROM ItemMetaData GROU
我需要存储和使用大于 ULLONG_MAX 的数值。 我需要对这些值进行算术运算,所以我认为存储为 char** 不是一个选项。 在这些情况下,有没有办法动态创建额外的 long 前缀? 谢谢大家。根
我是 Prolog 的新手,我正在尝试解决这个练习: Define a predicate greater_than/2 that takes two numerals in the notation
处理已知大小但大于 64 位的位掩码(即执行所有位操作)的最有效的数据结构是什么? 字节[]? 大整数?完全是别的东西吗? 需要与 Java 7 兼容,并且对于诸如此类的事情应该很快(或者至少与合理预
编辑:抱歉进行了许多编辑。我自己都忘记写了什么了。 我使用 JPanel,将 BoxLayout 作为 JFrame 的根面板。我向此根面板添加了另外两个面板:带有 FlowLayou 的 Butto
我是一名优秀的程序员,十分优秀!