我正在尝试使用Apache POI库为Java创建一些xlsx文件,并且创建文件的一切工作正常.
当我想使用物理打印机打印这些文件时,问题出现了.我想让我的工作簿中的每个工作表都适合单个页面.我浏览了文档,下面的代码应该可以工作:
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet("format sheet");
PrintSetup ps = sheet.getPrintSetup();
sheet.setAutobreaks(true);
ps.setFitHeight((short)1);
ps.setFitWidth((short)1);
for(int i = 0; i < 100; ++i){
sheet.createRow(i);
sheet.getRow(i).createCell(0).setCellValue("Test " + i);
}
FileOutputStream output = new FileOutputStream("Test.xlsx");
wb.write(output);
output.close();
Run Code Online (Sandbox Code Playgroud)
但它没有...当我尝试打印它时,它会打印到三张纸(如果我没有使用PrintSetup部件,它实际应该打印在哪一张).因此代码根本不做任何事情.
任何人都可以告诉我该代码有什么问题吗?
另外,我还有一个关于打印xlsx文件的问题:我想知道是否有办法从我的Java程序中打印xlsx文件而不实际打开文件并单击打印?像wb.printAllSheetsInWorkbook(); 或类似的东西.
这可能看起来像一个愚蠢的问题,但在询问了有关stackoverflow的一些问题并查看其他人的问题之后,通常有一件事情就是使用分析器来查看代码的哪一部分运行缓慢,等等.
作为一个编程初学者,我是所有这一切的新手,但由于我正在创建更大更大的项目,我觉得这样的工具有时会被证明是非常有用的.唯一的问题是,我不知道如何使用它们.
通常,我使用JDeveloper在Java中编码,我在互联网上读到有一个内置的.我尝试使用它,但我想我真的不知道如何,因为我找不到哪些部分让我的程序变慢.我不知道这是否是因为我不知道如何使用它,或者如果它是已知的不是很好,所以我想我会问这里看到哪一个我应该开始.
我也安装了Eclipse并且知道如何使用它(当我编写一些Python时或者当我尝试Android开发的教程时使用Eclipse),所以如果有一个免费的分析器,我可以用于这两个中的任何一个IDE,我真的很想知道它.另外,关于剖析器我需要了解的教程或基本内容对我有很大帮助.
在此先感谢并抱歉,我的问题并不是关于编程,但这似乎是获取有关分析器的有价值信息的最佳位置.
阅读编辑2,了解我实际上缺少的内容
我目前正在尝试使用在photoshop中创建的具有alpha参数的图像创建一些自定义JButton.
到目前为止,覆盖paint()方法来绘制图像已经起到了绘制按钮以显示正确图像的意义.不过,我想通过使其形状(可点击区域)与图像上的可见像素相同来改进它(现在,如果我绘制按钮的边框,它就是一个正方形).
有没有一种简单的方法可以做到这一点,还是我必须解析图像并找到alpha像素来制作自定义边框?
我必须覆盖哪些方法才能使其按照我想要的方式工作?
另外,我将在稍后提出的另一个问题是:使用某种算法来更改图像的颜色会更好,这样看起来当人们点击它时它被点击或者我最好创建第二个按钮处于活动状态时图像和绘图?
编辑:我刚刚读到一些其他问题,我应该重新定义paintComponent()而不是paint(),我想知道为什么重新定义paint()工作正常?
编辑2:我改变了一切,以确保我的JButton是使用带图标的默认构造函数创建的.我要做的是获取点击注册位置的X和Y位置并抓住该位置的图标像素并检查其alpha通道以查看它是否为0(如果是,则不执行任何操作,否则执行此操作应该采取的行动).
问题是,alpha通道始终返回255(蓝色,红色和绿色在透明像素上为238).在其他像素上,一切都返回它应该返回的值.
这是一个示例(如果需要,可以使用另一个图像尝试)重新创建我的问题:
public class TestAlphaPixels extends JFrame
{
private final File FILECLOSEBUTTON = new File("img\\boutonrondX.png"); //My round button with transparent corners
private JButton closeButton = new JButton(); //Creating it empty to be able to place it and resize the image after the button size is known
public TestAlphaPixels() throws IOException
{
setLayout(null);
setSize(150, 150);
closeButton.setSize(100, 100);
closeButton.setContentAreaFilled(false);
closeButton.setBorderPainted(false);
add(closeButton);
closeButton.addMouseListener(new MouseListener()
{
public void mouseClicked(MouseEvent e)
{
}
public void …Run Code Online (Sandbox Code Playgroud) 我正在创建一个程序,需要设置一些选项值以及一些图像文件路径,SQLite数据库路径,各种按钮上的文本信息,有关使用哪个数据库的信息(例如SQLite/MySQL)等
到目前为止,我有一个帮助类,其中我将所有内容都设置为静态,并且我从程序中的任何位置访问它,但它变得一团糟,我读到这是一种不好的做法,因为它不遵循面向对象的编程准则.
所以我所做的是使该类成为一个单例,并在我的控制器对象中引用它.要访问我的选项,我现在调用controller.getOptionName而不是直接调用Helper.getOptionName.
我有一种感觉,我正在以错误的方式接近这一点,特别是因为从我所读过的内容来看,如果我的许多对象依赖于单个类(助手类),我就不能将这一切分开.
我不知道我应该做什么,是否有一个"标准"在哪里保留我的所有选择?我考虑过使用XML文件或类似的东西,但我最终还是要从任何地方访问它,所以感觉这会产生同样的问题.
我在Python中使用mechanize从网站获取一些数据并向其发送新数据.
事情是该网站是法语,所以我得到一个菱形( )的问号,而不是éÉÀàùÙîû和其他人的各种字符.
我试着在谷歌和StackOverflow上四处寻找并发现了各种不能解决问题的答案.我已经看到了建议尝试以下其中一行的答案:
myString = éÀî
myString.encode('latin-1')
myString.encode('iso-8859-1')
unicode(myString, 'iso-8859-1')
Run Code Online (Sandbox Code Playgroud)
但这些似乎都不起作用.
我需要这两个的情况是当我读取带有重音的csv文件和包含重音的硬编码字符串时.例如,这是csv文件中的一行(实际上是';'是分隔符):
Adam Guérin;myemail@mail.com;555-5555;2011-02-05
Run Code Online (Sandbox Code Playgroud)
'é'看起来不错,但是当我尝试用机械化填充网站上的textField并提交它时,'é'现在在实际网站上看起来像' '.
编辑:
这是我在csv文件中读取数据的代码:
subscriberReader = csv.reader(open(path, 'rb'), delimiter=';')
subscribers = []
for row in subscriberReader:
subscribers.append(Subscriber(row[0], row[1], row[2]))
Run Code Online (Sandbox Code Playgroud)
然后我使用mechanize将其发送到网站:
self.br.select_form('aspnetForm')
self.br.form['fldEmail'] = subscriber.email
self.br.form['fldName'] = subscriber.name
self.br.form['fldPhoneNum'] = subscriber.phoneNum
self.br.submit()
Run Code Online (Sandbox Code Playgroud)
我尝试了各种方法来编码字符,但我想我没有正确地做到这一点.我很乐意尝试在答案/评论中提出的任何建议.
至于网站,它没有指定它在标题中使用的编码.
通常,当我初始化我想在SWING应用程序中使用的字体时,我这样做:
public static final Font TITLEFONT = new Font("Calibri", Font.BOLD, 40);
Run Code Online (Sandbox Code Playgroud)
现在,由于我正在使用.ttf文件中的一些自定义字体,因此我必须采用不同的方式.我用这种方式初始化字体:
try
{
InputStream is = OptionsValues.class.getResourceAsStream("fonts//KOMIKAX_.ttf");
TITLEFONT = Font.createFont(Font.TRUETYPE_FONT, is);
}
catch (Exception ex)
{
ex.printStackTrace();
System.err.println("Font not loaded. Using Calibri font.");
TITLEFONT = new Font("Calibri", Font.BOLD, 40);
}
Run Code Online (Sandbox Code Playgroud)
我很确定它正确地初始化它(我无法确定,因为它对我来说太小了),但我想知道如何手动设置字体的大小(如果它是粗体/其他这种方式加载字体时.
非常感谢提前!
我有一些表格,其中包含有关球员的数据以及本赛季他们在联赛中在保龄球中心击败的比赛.这个特定查询的用途是对男性和女性今年的前X平均值进行排序.我已经把这一切都搞定了,但是在某些特定情况下,当一些球员在多个联赛中打球并且在顶级X中有超过一个平均值时,我仍然存在问题.
显然,我只想列出给定球员的最佳平均值,所以如果球员A在联盟ABC中的平均得分最高,而联盟DEF的平均得分为198,那么我只想要列出200.
这是我想要更改的查询的简化版本,因为现在我必须手动删除重复项或者我必须用另一种语言编写分类器,但我宁愿在纯SQL中执行此操作.(我只从该示例的查询中删除了不相关的信息):
SELECT playerId, ROUND(AVG(score),2)Average, season, leagueName, COUNT(score)NumGames FROM Scores
WHERE season = '2011-2012' AND score > -1
GROUP BY season, playerID, leagueName
ORDER BY Average DESC LIMIT 0,30
Run Code Online (Sandbox Code Playgroud)
基本上,该Scores表包含每个单独的游戏,一个playerId,玩游戏的季节和leagueName(以及本例中不需要的其他列).
这WHERE是为了确保比赛在本赛季进行,并且得分为正(-1表示人们不在场时).我根据赛季,球员ID和联盟名称对所有内容进行分组,因此我得到每个球员的平均PER LEAGUE,而不是在不同联赛中所有比赛的平均值.
我尝试使用DISTINCT关键字,但这不起作用,因为我不能DISTINCT只使用一个列.我也尝试了其他的东西,但是它们都没有接近工作,所以我想知道是否甚至可以这样做,或者我是否必须使用另一种语言对这个结果集进行排序并删除重复项?
在学校,我们必须使用Python和Tkinter作为一个小组项目创建游戏,并且由于程序变得相当大,我想知道我的问题是否是由Tkinter本身引起的,然后才尝试在程序中搜索问题.
问题是,当我们开始创建单位时,当有多个单位同时显示(比方说80)使用create_rectangle方法创建时,如果我们开始全部移动它们,它会变得非常不稳定.在我们当时正在展示的游戏中,有多个元素(一些使用小GIF)用于多个菜单,而在画布上有我刚刚提到的单位和一些小建筑也使用一些小GIF文件.
我们使用after方法来回调一个方法,该方法删除画布上的所有内容,然后每50毫秒重新绘制所有建筑物和单位的正确位置.
这应该是Tkinter容易处理的还是我们程序本身的问题?
我有一段时间没有使用MiGLayout,我不记得如何删除组件之间自动放入的空间.我尝试使用以下参数无效(请注意,我想保持水平间距):
novisualpadding
垫0
插图0
growy
这是我的意思的一个例子:

我想要的是将行分为两个.所以第一个和第二个JTextFields行之间不应该有间隙.不过,我想保持第二排和第三排之间的差距.我希望第三和第四行分组,它们之间没有任何间隙,等等.
这是我的布局代码的相关部分(这是在扩展JPanel的类中):
setLayout(new MigLayout("insets 0", "grow"));
//Code to create the JTextFields not shown as it is not relevant
for(int i = 0; i < textFields.length; ++i) {
for(int j = 0; j < textFields[0].length; ++j) {
textFields[i][j].setPreferredSize(new Dimension(80, 50));
if(j == 0 && i % 2 == 0) //If it's the first JTextField in an even row
add(textFields[i][j], "newline, split, gaptop 5, gapright 5");
else if(j == 0 && i % 2 != 0) …Run Code Online (Sandbox Code Playgroud) 我刚刚开始在Python中使用mechanize,我已经遇到了一些问题.我已经浏览了StackOverflow和谷歌,我看到人们说文档很棒,应该很容易让它工作,但我想我不知道如何寻找那些文档,因为我所有的可以找到的代码示例并没有真正教我如何做我正在尝试的特定事情.如果有人能指出我这样的文件,我很乐意自己阅读并解决我的问题.
对于实际问题,我试图通过在表单中发送我的用户名和密码信息来登录网站.当信息正确时,我通常会被重定向,但它在机械化中不起作用.
这是我没有得到的部分,因为如果我在调用submit后立即打印页面的html内容,页面将显示一个变量,表明身份验证有效.如果我将密码更改为不正确的密码,则html会显示"无效凭据"消息,就像我正常浏览网站一样.
这是我如何做的代码示例.请记住,这可能是完全错误的,因为我只是尝试应用我在示例中找到的内容:
import mechanize
import cookielib
# Start Browser
br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.open('http://www.complexejuliequilles.com/')
for l in br.links(url_regex='secure'):
br.follow_link(l)
br.select_form('form1')
br.form['fldUsername'] = 'myUsername'
br.form['fldPassword'] = 'myPassword'
br.submit()
Run Code Online (Sandbox Code Playgroud)
在这个特定的例子中,我打开http://www.complexejuliequilles.com,然后我按照底部的链接,其中包含文本"管理",我在表单中输入我的凭据,然后我提交它.通常情况下,我会被重定向到我所在的第一页,但有更多按钮只能由管理员使用.我想点击其中一个链接填写另一个表单,添加一个用户列表,其中包含我们的电子邮件地址,姓名等.
我有什么简单的东西吗?我想我得到了基础知识,但我不知道该库足以找到重定向出了什么问题.